package FW.Entidades;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Date;
import java.util.List;

import javax.swing.table.DefaultTableModel;


/**
 * @author amedey
 * @version 1.0
 * @created 19-ago-2011 20:56:08
 */
public class Venta extends EntidadBase {

	/**
	 * @uml.property  name="articulo"
	 * @uml.associationEnd
	 */
	public Articulo Articulo;
	/**
	 * @uml.property  name="cliente"
	 * @uml.associationEnd
	 */
	public Persona Cliente;
	/**
	 * @uml.property  name="empleado"
	 * @uml.associationEnd
	 */
	public Empleado Empleado;

	public Venta(){

	}

	@Override
	public String ObtenerNombreTabla() {
		return "venta";
	}

	@Override
	public Object[] obtenerDatosParaInsertar() {
		return new Object[]{null, Cliente.Id, Empleado.Id, Articulo.Id, new Date(), null};
	}

	@Override
	public ObjetoBase InstanciarObjeto() {
		return new Venta();
	}

	public void FiltrarVentas(String nombreCliente, String nombreArticulo, DefaultTableModel dtm)
	{
		if(dtm == null)
		{
			throw new NullPointerException("dtm");
		}
		Cliente cliente = new Cliente();
		Articulo articulo = new Articulo();
		
		String nombreClienteLike = cliente.ObtenerNombreTabla() + ".Nombre like";
		String nombreArticuloLike = articulo.ObtenerNombreTabla() + ".Nombre like";
		
		String sql = "select * from " +	ObtenerNombreTabla() + ", " + cliente.ObtenerNombreTabla() + ", " +
		articulo.ObtenerNombreTabla() + " where " +
		ObtenerNombreTabla() + ".cliente = " + cliente.ObtenerNombreTabla() + ".id and " +
		ObtenerNombreTabla() + ".articulo = " + articulo.ObtenerNombreTabla() + ".id and ";
		Object[] parametros = null;
		
		if(nombreCliente.equals("") && nombreArticulo.equals(""))
		{
			sql += "(" + nombreClienteLike + " ? or " + nombreArticuloLike + " ? " + ") ";
			parametros = new Object[]{"%" + nombreCliente + "%", "%" + nombreArticulo + "%"};
		}else
		{
			if(!nombreCliente.equals(""))
			{
				sql += nombreClienteLike + " ?";
				parametros = new Object[]{"%" + nombreCliente + "%"};
			}else
			{
				sql += nombreArticuloLike + " ?";
				parametros = new Object[]{"%" + nombreArticulo + "%"};
			}
		}
		List<ObjetoBase> resultados = null;
		try {
			resultados = super.ObtenerPorTexto(sql, parametros);
		} catch (Exception e) {
			e.printStackTrace();
		}
		
		for(ObjetoBase objeto : resultados)
		{
			Venta venta = (Venta)objeto;
			dtm.addRow(new Object[]{venta.Id, venta.Cliente.nombre, venta.Articulo.nombre, 
					 venta.fechaAlta});
		}
			
	}
	
	@Override
	public Object[] obtenerDatosParaActualizar() {
		return new Object[]{"Cliente", "Empleado", "Articulo", Cliente.Id, Empleado.Id, Articulo.Id};
	}
	
	public void ConstruirObjeto(ResultSet rs)
	{
	    try {
	    	Cliente cliente = new Cliente();
			Articulo articulo = new Articulo();
			Empleado empleado = new Empleado();
	    	Id = rs.getInt("Id");
			fechaAlta = rs.getDate("fechaAlta");
			fechaBaja = rs.getDate("fechaBaja");
	    	Cliente = (Cliente) cliente.ObtenerPorId(rs.getString("Cliente"));
	    	Articulo = (Articulo) articulo.ObtenerPorId(rs.getString("Articulo"));
	    	Empleado = (Empleado) empleado.ObtenerPorId(rs.getString("Empleado"));			
			
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}

	public void borrarVentasDeCliente(Cliente cliente)
	{
		String condiciones = " Cliente = ?";
		
		super.Borrar(condiciones, new Object[]{cliente.Id});
	}
	
	public void borrarVentasDeArticulo(Articulo articulo)
	{
		String condiciones = " Articulo = ?";
		
		super.Borrar(condiciones, new Object[]{articulo.Id});
	}
}